package com.example.server.advice;

import com.example.server.exception.YebException;
import com.example.server.vo.RespBean;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;



/**
 * RestControllerAdvice
 * rest @ResponseBody 返回的结果是json格式的字符串
 * controller 控制器， 用于和客户端进行连接
 * advice 通知、增强，对所有的controller的异常做的增强，表示，在程序出现异常的时候
 * 如果这个异常没有处理，就会被抛给当前的组件来进行处理
 *
 * 在该组件中，我们可以定义各种不同的异常的处理方式
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionAdvice {

//    private final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionAdvice.class);

    @ExceptionHandler(ArithmeticException.class)
    public RespBean arithmeticExceptionHandler(ArithmeticException e) {

        /**
         * 打印异常
         * ！将报错记录到数据库
         * 将异常翻译翻译，发送给客户端
         */
        log.error("程序出现了算术异常：" + e.getMessage(), e);

        return RespBean.error(201,"程序出现了算术异常：" + e.getMessage());
    }

    @ExceptionHandler(YebException.class)
    public RespBean yebExceptionHandler(YebException exception) {

        log.error(exception.getMsg(), exception);

        return RespBean.error(exception.getCode(), exception.getMsg());
    }
}
